iT邦幫忙

2024 iThome 鐵人賽

DAY 4
0
Security

零知識證明-走進PLONK世界系列 第 4

[Day4]零知識證明-走進PLONK世界: ZK-SNARK詳細介紹

  • 分享至 

  • xImage
  •  

相信大家對 ZK-SNARK、ZK-STARK、Recursive SNARK(遞歸SNARK)都有基礎認識了,
接下來就在介紹PLONK之前,會先深入講解ZK-SNARK。

zkSNARK 本身是一個形容詞,形容證明(proof)的性質,拆解來看的話就是:

zkSNARK 可以拆解成為:

  • zk 代表 零知識 (zero knowledge)
  • S 代表 簡潔 (Succinct)
  • N 代表 非交互 (Non interactive)
  • ARK 代表 知識請證 (Argument of Knowledge)

zkSNARK 原理:
重點在於證明(proof)方式,因為證明方式是有不同種類,主要可以分為交互式證明(Interactive Proof, IP)和非交互式證明(Non Interactive Proof, NIP)。
交互式證明的例子:
驗證色盲 - 通過驗證者多次向證明者提出挑戰,以確定證明者是能分辨出紅色和綠色,只要一直成功答對,是色盲的機率就愈低。
然而大家都可以輕易觀察到交互式證明必須花大量時間和成本進行交互,次數愈多,造假率就愈低。

  • Fiat-Shamir Transform:
    是一個工具可以把IP轉換成NIP(Non Interactive Proof)。
    概念是希望把驗證者產出隨機數這個動作讓證明者去做,驗證者就只要進行一次驗證就可以,不用再向證明者發送挑戰。
    https://ithelp.ithome.com.tw/upload/images/20240918/20119569ZLbv8NGLtk.png

  • 隨機數:
    為了使協議可進行非交互,證明者需預先使用加密雜湊函數對驗證者產生隨機性(用於隱藏挑戰)。這個會被稱為隨機預言。之後證明者可以向驗證者發送一個訊息,驗證者在收到訊息後會檢查該訊息是否正確。所以證明者需要另一個工具:Random Oracle Model來產生一個隨機數,用於產出證明。每一個傳給證明者的證明改成先傳給Random Oracle,而每次傳入的時候也包含舊的證明,即每一個證明都會有一個隨機值,而且一定得把前面的所有證明正確地計算出來才知道隨機值是什麼。在最後證明者只需要把最後的證明發送給證明者就可以。

  • 承諾方案:
    可以允許提交者提交帶有短字串的多項式,驗證者可以使用該短字串來確認所提交多項式的聲明評估。
    merkle tree 是一種承諾方案,與利用一堆點形成一條線的polynomial commitment是一樣。
    兩者都能做到簡潔的效果:
    他們都有一個包含全部資訊的載體,而這資訊的載體能結合數個原有資訊,
    merkle tree 就是個載體,tree root 就結合數個原有樹葉資訊;
    polynomial commitment 也是個載體,多項式本身就結合多個點的資訊。

  • 預處理設定的類型:

    1. 針對每個可信任的電路設定: 每個電路需運行一次。
      對於特定的電路及具秘密隨機性(公共參考字串-CRS)必須保密和被銷毀。
    2. 妥協設定: 是指不誠實的證明者可以證明錯誤的陳述。
    3. 可信任的通用設定: 只需運行一次可信任設置,然後就能夠在不同電路上進行確定性的預處理。
    4. 透明設定(無可信設定): 預處理演算法可以完全不使用任何秘密隨機性。

SNARK證明結構的類型:

  1. Groth16:需要可信任設定,不過具有非常簡短的證明,能做到快速驗證。
  2. Sonic /Marlin /Plonk:可信任的通用設定。
  3. DARK /HALO /STARK:無可信設定,但會產生比較長的證明或可能需要更長的時間來運行證明。

當需要多個驗證者(例如:Zcash等區塊鏈 或Aztec等zk-Rollup)時,SNARKS就會非常有用,
因為這樣的情況之下,多個驗證節點就不必與每個證明進行多次交互, 從而減少大量時間及相關成本。
換言之,可以看到SNARK是具有很大價值,特別是在區塊鏈的應用埸景之下。

既然提到區塊鏈,那就要分享一些真實例子作說明。
Zcash就是一個應用了zk-SNARK的著名例子,Zcash 將零知識證明結合區塊鏈技術而做出一個創新的匿蹤技術,
zk-SNARK可以將匯款資料等紀錄完全隱藏,礦工可以在資料隱藏的狀態下維持帳本運作及有效地阻止雙花的情況發生,
另外,Zcash區塊鏈上有兩種不同的錢包:

  • 公開錢包 (Transparent Wallet)
  • 受保護錢包 (Shielded Wallet)

當公開錢包匯款99個Zcash給公開錢包時,這項交易紀錄會跟普通的比特幣匯款一樣會被公開在Zcash的區塊鏈上,
但如果由公開錢包匯款99個Zcash給受保護錢包,在區塊鏈上會看到這公開錢包匯出99個Zcash,
不過就無法去追蹤這筆款項最終是到了哪個錢包。相反,如果一個受保護錢包匯款給一個公開錢包,
在區塊鏈上只能看到有人(不知道身份)匯款99個Zcash給這個公開地址,但無法追查匯款人是誰。
所以如果受保護錢包匯款給另一個受保護錢包時就會完全隱藏所有交易紀錄,這就是真正的匿名。

參考:

  1. Succinct Non-Interactive Zero Knowledge for a von Neumann Architecture
    https://eprint.iacr.org/2013/879.pdf
  2. ZCASH
    https://z.cash/learn/
  3. Zero Knowledge Canon, part 1 & 2
    https://a16zcrypto.com/posts/article/zero-knowledge-canon/
  4. Quadratic Arithmetic Programs: from Zero to Hero
    https://medium.com/@VitalikButerin/quadratic-arithmetic-programs-from-zero-to-hero-f6d558cea649
  5. Proofs that yield nothing but their validity or all languages in NP have zero-knowledge proof systems
    https://people.csail.mit.edu/silvio/Selected%20Scientific%20Papers/Zero%20Knowledge/Proofs_That_Yield_Nothing_But_Their_Validity_or_All_Languages_in_NP_Have_Zero-Knowledge_Proof_Systems.pdf
  6. The Fiat-Shamir Transform - Ron Rothblum
    https://www.youtube.com/watch?v=9cagVtYstyY

上一篇
[Day3]零知識證明-走進PLONK世界: ZK-SNARK、ZK-STARK、Recursive SNARK
下一篇
[Day5]零知識證明-走進PLONK世界:zk-SNARK的QAP轉換
系列文
零知識證明-走進PLONK世界30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言